#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
示例文件：展示如何使用通用API处理模式处理不同类型的API请求
请求格式: url/?api=<api>[&param1=<param1>&...]
"""

import sys
import os

# 添加项目根目录到Python路径
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

from flask import Flask, request, jsonify
from modules.api_handler import api_route

app = Flask(__name__)

# =====================================================
# 示例1：基本用法 - 设备管理API
# =====================================================

# 处理函数定义
def get_device_list_handler(params):
    """获取设备列表处理函数"""
    # 模拟获取设备列表
    devices = [
        {"id": "device1", "name": "设备1", "status": "在线"},
        {"id": "device2", "name": "设备2", "status": "离线"}
    ]
    return devices

def get_device_info_handler(params):
    """获取设备信息处理函数"""
    device_id = params.get('device_id')
    if not device_id:
        return {"error": "Missing required parameter: device_id"}, 400
    
    # 模拟获取设备信息
    device_info = {"id": device_id, "name": f"设备{device_id}", "status": "在线"}
    return device_info

# API处理映射
device_api_handlers = {
    'get_device_list': get_device_list_handler,
    'get_device_info': get_device_info_handler,
}

# 路由定义
@app.route('/api/devices')
@api_route(device_api_handlers)
def handle_device_api():
    """统一处理设备相关的API请求
    请求示例:
    - /api/devices?api=get_device_list
    - /api/devices?api=get_device_info&device_id=device1
    """
    # 该函数体不会被执行，实际处理由api_route装饰器完成
    pass

# =====================================================
# 示例2：带有复杂参数处理的API
# =====================================================

def search_handler(params):
    """搜索处理函数"""
    keyword = params.get('keyword', '')
    category = params.get('category', 'all')
    page = int(params.get('page', 1))
    page_size = int(params.get('page_size', 10))
    
    # 模拟搜索结果
    results = [
        {"id": 1, "title": f"搜索结果 {i} - {keyword}", "category": category}
        for i in range(1, page_size + 1)
    ]
    
    return {
        "results": results,
        "page": page,
        "page_size": page_size,
        "total": 100,  # 模拟总结果数
        "keyword": keyword,
        "category": category
    }

def advanced_search_handler(params):
    """高级搜索处理函数"""
    # 从params中提取所有搜索条件
    search_params = {}
    for key, value in params.items():
        search_params[key] = value
    
    # 模拟高级搜索结果
    results = [
        {"id": 1, "title": "高级搜索结果 1", "params": search_params},
        {"id": 2, "title": "高级搜索结果 2", "params": search_params}
    ]
    
    return {"results": results, "search_params": search_params}

# API处理映射
search_api_handlers = {
    'search': search_handler,
    'advanced_search': advanced_search_handler,
}

# 路由定义
@app.route('/api/search')
@api_route(search_api_handlers)
def handle_search_api():
    """统一处理搜索相关的API请求
    请求示例:
    - /api/search?api=search&keyword=测试&category=文档&page=1&page_size=20
    - /api/search?api=advanced_search&keyword=测试&category=文档&author=admin&date_from=2023-01-01
    """
    # 该函数体不会被执行，实际处理由api_route装饰器完成
    pass

# =====================================================
# 示例3：多级API处理
# =====================================================

def create_multi_level_api_handler(prefix):
    """创建多级API处理函数"""
    def handler(params):
        sub_api = params.get('sub_api')
        if not sub_api:
            return {"error": "Missing required parameter: sub_api"}, 400
        
        # 处理子API
        if sub_api == 'list':
            return {"message": f"处理 {prefix} 列表请求", "params": params}
        elif sub_api == 'detail':
            item_id = params.get('id')
            if not item_id:
                return {"error": "Missing required parameter: id"}, 400
            return {"message": f"处理 {prefix} 详情请求", "id": item_id, "params": params}
        else:
            return {"error": f"Unknown sub_api: {sub_api}"}, 404
    
    return handler

# API处理映射
multi_level_api_handlers = {
    'user': create_multi_level_api_handler('用户'),
    'project': create_multi_level_api_handler('项目'),
    'report': create_multi_level_api_handler('报告'),
}

# 路由定义
@app.route('/api/multi')
@api_route(multi_level_api_handlers)
def handle_multi_level_api():
    """统一处理多级API请求
    请求示例:
    - /api/multi?api=user&sub_api=list
    - /api/multi?api=user&sub_api=detail&id=123
    - /api/multi?api=project&sub_api=list
    - /api/multi?api=project&sub_api=detail&id=456
    """
    # 该函数体不会被执行，实际处理由api_route装饰器完成
    pass

# =====================================================
# 主程序
# =====================================================

if __name__ == '__main__':
    print("这是一个示例文件，展示如何使用通用API处理模式处理不同类型的API请求。")
    print("在实际应用中，可以将此文件导入到主应用程序中使用。")
    
    # 如果需要单独运行此示例，可以取消下面的注释
    # app.run(host='0.0.0.0', port=5001, debug=True)